﻿using System;
using System.ComponentModel;
using System.Data.Linq;
using System.Data.Linq.Mapping;

namespace WPCloudPT.Model.DbModel
{
    [Table(Name = "DadosUtilizadores")]
    public class TbUtilizador : INotifyPropertyChanging
    {
        private int _cloudPtConvitesEnviados;
        private DateTime _cloudPtCriacaoUtilizador;
        private string _cloudPtEmail;
        private string _cloudPtNome;
        private string _cloudPtOauthToken;
        private string _cloudPtOauthTokenSecret;
        private double _cloudPtQuota;
        private int _cloudPtQuotaInvites;
        private double _cloudPtQuotaNormal;
        private double _cloudPtQuotaPartilhada;
        private DateTime _cloudPtUltimoAcesso;
        private bool _cloudPtUserActivo;
        private double _cloudPtUserId;

        [Column(IsVersion = true)]
        private Binary _version;



        [Column(AutoSync = AutoSync.OnInsert, IsPrimaryKey = true, IsDbGenerated = true,
            DbType = "INT NOT NULL Identity", Name = "UtilizadorId")] private int _utilizadorId;
        public int UtilizadorId
        {
            get { return _utilizadorId; }
            set
            {
                if (_utilizadorId == value) return;
                OnPropertyChanging("UtilizadorId");
                _utilizadorId = value;
            }
        }

        [Column(DbType = "float", Name = "CloudPtUserId")]
        public double CloudPtUserId
        {
            get { return _cloudPtUserId; }
            set
            {
                if (_cloudPtUserId == value) return;
                OnPropertyChanging("CloudPtUserId");
                _cloudPtUserId = value;
            }
        }

        [Column(DbType = "nvarchar(120) not null", Name = "NomeUtilizador")]
        public string CloudPtNome
        {
            get { return _cloudPtNome; }
            set
            {
                if (_cloudPtNome == value) return;
                OnPropertyChanging("CloudPtNome");
                _cloudPtNome = value;
            }
        }

        [Column(DbType = "nvarchar(250) not null", Name = "Email")]
        public string CloudPtEmail
        {
            get { return _cloudPtEmail; }
            set
            {
                if (_cloudPtEmail == value) return;
                OnPropertyChanging("CloudPtEmail");
                _cloudPtEmail = value;
            }
        }

        [Column(DbType = "datetime", Name = "DataUltimoAcesso")]
        public DateTime CloudPtUltimoAcesso
        {
            get { return _cloudPtUltimoAcesso; }
            set
            {
                if (_cloudPtUltimoAcesso == value) return;
                OnPropertyChanging("CloudPtUltimoAcesso");
                _cloudPtUltimoAcesso = value;
            }
        }

        [Column(DbType = "datetime", Name = "DataCriacao")]
        public DateTime CloudPtCriacaoUtilizador
        {
            get { return _cloudPtCriacaoUtilizador; }
            set
            {
                if (_cloudPtCriacaoUtilizador == value) return;
                OnPropertyChanging("CloudPtCriacaoUtilizador");
                _cloudPtCriacaoUtilizador = value;
            }
        }

        [Column(DbType = "bit", Name = "UtilizadorActivo")]
        public bool CloudPtUserActivo
        {
            get { return _cloudPtUserActivo; }
            set
            {
                if (_cloudPtUserActivo == value) return;
                OnPropertyChanging("CloudPtUserActivo");
                _cloudPtUserActivo = value;
            }
        }

        [Column(DbType = "float", Name = "CloudPtQuota")]
        public double CloudPtQuota
        {
            get { return _cloudPtQuota; }
            set
            {
                if (_cloudPtQuota == value) return;
                OnPropertyChanging("CloudPtQuota");
                _cloudPtQuota = value;
            }
        }

        [Column(DbType = "float", Name = "CloudPtQuotaPartilhada")]
        public double CloudPtQuotaPartilhada
        {
            get { return _cloudPtQuotaPartilhada; }
            set
            {
                if (_cloudPtQuotaPartilhada == value) return;
                OnPropertyChanging("CloudPtQuotaPartilhada");
                _cloudPtQuotaPartilhada = value;
            }
        }

        [Column(DbType = "float", Name = "CloudPtNormal")]
        public double CloudPtQuotaNormal
        {
            get { return _cloudPtQuotaNormal; }
            set
            {
                if (_cloudPtQuotaNormal == value) return;
                OnPropertyChanging("CloudPtQuotaNormal");
                _cloudPtQuotaNormal = value;
            }
        }

        [Column(DbType = "int", Name = "CloudPtQuotaInvites")]
        public int CloudPtQuotaInvites
        {
            get { return _cloudPtQuotaInvites; }
            set
            {
                if (_cloudPtQuotaInvites == value) return;
                OnPropertyChanging("CloudPtQuotaInvites");
                _cloudPtQuotaInvites = value;
            }
        }

        [Column(DbType = "int", Name = "CloudPtConvitesEnviados")]
        public int CloudPtConvitesEnviados
        {
            get { return _cloudPtConvitesEnviados; }
            set
            {
                if (_cloudPtConvitesEnviados != value)
                {
                    OnPropertyChanging("CloudPtConvitesEnviados");
                    _cloudPtConvitesEnviados = value;
                }
            }
        }

        [Column(DbType = "nvarchar(250)", Name = "OauthTokenAcesso")]
        public string CloudPtOauthToken
        {
            get { return _cloudPtOauthToken; }
            set
            {
                if (_cloudPtOauthToken == value) return;
                OnPropertyChanging("CloudPtOauthToken");
                _cloudPtOauthToken = value;
            }
        }


        [Column(DbType = "nvarchar(250)", Name = "OauthTokenSecret")]
        public string CloudPtOauthTokenSecret
        {
            get { return _cloudPtOauthTokenSecret; }
            set
            {
                if (_cloudPtOauthTokenSecret != value)
                {
                    OnPropertyChanging("CloudPtOauthTokenSecret");
                    _cloudPtOauthTokenSecret = value;
                }
            }
        }

        #region INotifyPropertyChanging Members

        public event PropertyChangingEventHandler PropertyChanging;
        protected virtual void OnPropertyChanging(string propertyName)
        {
            var handler = PropertyChanging;
            if (handler == null) return;
            handler(this, new PropertyChangingEventArgs(propertyName));
        }
        #endregion

        
    }
}